<?php
/**
 * 
 * IndicadoresSeguimientoCI ...
 * 
 * @author Algenis Volquez
 *
 */
	class IndicadoresSeguimientoCI extends Controller
	{
		private $_semanaArray;
		private $_usuariosArray;
		private $_semanaActual;
		private $_usuarioActual;
		private $_companias;
		const USER_CSA = 2;
		const COMPANIA_EXPRESS = 1;
		const CONTROL_INTERNO = 1;
		
		public function __construct()
		{
			parent::Controller();
			
			$this->load->library(array('chgraficos','chcalendario'));
			
			$this->load->model(array('mcompania','mestatus','metapas','mjurisdiccion','mresponsable',
								'mservicios','usuarios','mprocesos','mmodeloetapas',
								'mtiposeguimientos'));
							 
		 	$this->_semanaActual = $this->input->post('cantSemana') ? $this->input->post('cantSemana') : 9;
		 	$this->_usuarioActual = $this->input->post("idUsuario");			   
			$this->session->set_userdata('semanaActual',$this->_semanaActual);
			$this->session->set_userdata('usuarioActual', $this->_usuarioActual);
			
			foreach($this->usuarios->LoadUsuarios() as $usuario){
				
				if($usuario->getIdDepartamento() != 1 && $usuario->getIdDepartamento() != 3 && $usuario->getIdDepartamento() != 5 && $usuario->getEstado() != 1){
					 		$this->_usuariosArray[] = $usuario;
				}
			}
		
		}
	
		public function index()
		{
			$this->load->view('second', array('content_page' 						=> 'gestion_ci', 
											'menutop' 								=> 0,
											'usuarios'								=> $this->_usuariosArray,
											'semanaFiltro' 							=> 9,
											'usuarioFiltro'							=> 0,
											'totalSeguimientoCI' 					=> $this->getGraficoTotalSeguimientoCI (), 
											'totalComposicionSeguimientoCI' 		=> $this->getGraficoTotalComposicionSeguimientoCI (), 
											'totalComposicionSeguimientoCIGestor' 	=> $this->getGraficoTotalComposicionSeguimientoCIPorGestor (),
											'totalComposicionRegistrosCIPorGestor' 	=> $this->getGraficoTotalComposicionRegistrosCIPorGestor (), 
											'totalRegistrosPorEstatusInicial' 		=> $this->getGraficoTotalRegistrosPorEstatus ( 4 ), 
											'totalRegistrosPorEstatusFirma' 		=> $this->getGraficoTotalRegistrosPorEstatus ( 10 ), 
											'totalRegistrosPorEstatusDatos' 		=> $this->getGraficoTotalRegistrosPorEstatus ( 11 ), 
											'promedioSeguimientoCI' 				=> $this->getGraficoPromedioSeguimientoCI (), 
											'seguimientosCIPorRegistosServicio' 	=> $this->getGraficoSeguimientosCIPorRegistosServicio (), 
											'promedioSeguimientosPorDia' 			=> $this->getGraficoPromedioSeguimientosPorDia ()));	
		}
		/**
	    * UTILIZE ESTE PEDAZO DE CODIGO PARA SETEAR EL CAMPO
	    * idUsuarioSca EN LA TABLA SC_Compania
	    * nota: solo se uso para reparar datos viejos 
	    **/
		
		/*
		public function setIdUsuarioScaByCompania()
		{
			$todasCompania = $this->mcompania->LoadCompanias();
			 
			$usuarioCsa = array();
			foreach ($this->usuarios->LoadUsuarioByIdDepAcivos(self::USER_CSA) as $objetoUsuarioCsa){
			     $usuarioCsa[] = $objetoUsuarioCsa->getIdUsuario();
			}
			
			foreach ($todasCompania as $objetoCompania){
				$idUsuarioCsa = 0;
			    $usuarioRandon = $usuarioCsa[rand(0, count($usuarioCsa)-1)];
				
				$usuarioCreador = $this->usuarios->LoadUsuarioById($objetoCompania->getIdUsuario());
				
			    if ($objetoCompania->getIdServicio() == self::COMPANIA_EXPRESS || $usuarioCreador->getIdDepartamento() == self::USER_CSA) {
			    	$idUsuarioCsa = $objetoCompania->getIdUsuario();
			    }else{
			       $idUsuarioCsa = $usuarioRandon;
			    }
			   
			    $this->mcompania->setIdUsuarioScaByCompania($objetoCompania->getIdCompania(), $idUsuarioCsa);
			}
		
		}
		*/
		
		/**
		 * UTILIZE ESTE PEDAZO DE CODIGO PARA SETEAR EL CAMPO
	     * idUltimaEtapa EN LA TABLA SC_Compania
	     * nota: solo se uso para reparar datos viejos 
	     **/
		
		public function setIdUltimaEtabaByCompania()
		{
		     $this->_companias = $this->mcompania->LoadCompanias();
		
	         foreach($this->_companias as $compania){
                  $proceso = $this->mprocesos->loadLastProceso($compania->getIdCompania());
		
		           if($proceso == ""){
			            continue;
		           }

		           $proceso_obj = $this->mprocesos->loadProcesoById(intval($proceso));
		           $etapa_obj = $this->metapas->LoadEtapaById($proceso_obj->getIdEtapa());
		           $this->mcompania->setIdUltimaEtabaByCompania($compania->getIdCompania(), $etapa_obj->GetIdEtapa(), $etapa_obj->getClasificacionProceso());
	          }
	           echo 'El proceso se ejecuto exitosamente!!!';
		
		}
		
		
		/**
		 * UTILIZE ESTE PEDAZO DE CODIGO PARA VERIFICAR CUALES  SON
		 * LOS SEGUIMIENTOS QUE EXISTEN DE COMPANIAS QUE ESTAN 
		 * ELIMINADAS, PARA LUEGO SER ELIMINADOS DEL LA TABLA SC_Procesos
	     * nota: solo se uso para reparar datos viejos 
	     **/
		
		public function VerificarProcesos()
		{	
			$campo = "IdCompania";
		    $seguimientos = $this->mprocesos->ObtenerProcesosAgrupados($campo);
		    $idsCompania = array();
		    foreach($seguimientos as $seguimiento){
		    	$company = $this->mcompania->loadAllCompanias(array('IdCompania' => $seguimiento->getIdCompania()));
			    if($company == false){
			   	   
			   	   	$idsCompania[] = $seguimiento->getIdCompania();
			   	}
		    }
		  	for($x = 0; $x < count($idsCompania); $x++){
		  		$this->mprocesos->eliminarProcesosPorCompania($idsCompania[$x]);
		  	}
		}
		
		
		public function getDataSeguimientoCI($cantSemana = 9, $idUsuario = 0)
	    {
	    	
	    	$page = $this->input->post('page') ? $this->input->post('page') : 1;
			$sortname = $this->input->post('sidx') ? $this->input->post('sidx') : 'IdCompania';
			$sortorder = $this->input->post('sord') ? $this->input->post('sord') : 'asc';
			$limit = $this->input->post('rows') ? $this->input->post('rows') : 200;
			
			$this->_semanaArray = $this->chcalendario->semana($cantSemana);
			
			$start = $limit * $page - $limit;
			if($start < 0) $start = 0;
			 
			$referencia = false;
			$etapa      = false;
			$dataEtapa = false;
			$filtroUsuario = 0;
	
			header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
			header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
			header("Cache-Control: no-cache, must-revalidate" );
			header("Pragma: no-" );
			
			$filtroFecha = "";
	    	
			foreach ($this->_semanaArray as $semana => $fecha){
				
	       		$fechaI = explode(" ", $fecha[0]);
	       		$filtroFecha = $fechaI[0];
	       		break; 
	       	}
	      	
			$this->_companias = $this->mcompania->loadOlderCompaniesByUserAndWeek($filtroFecha, $idUsuario, 5, self::CONTROL_INTERNO);
			
			$totalRecords = count($this->_companias);
	
			$totalPages = ceil($totalRecords/$limit);
			if ($page > $totalPages) $page = $totalPages;
	
			$json_output = array(
			'page'		=> $page,
			'total'		=> $totalPages,
			'records'	=> $totalRecords,
			'rows'		=> array());
		
			if($this->_companias != false){
							
				foreach($this->_companias as $compania){
						$proceso = $this->mprocesos->loadLastProceso($compania->getIdCompania());
						$proceso_obj = $this->mprocesos->loadProcesoById(intval($proceso));
						$etapa_obj = $this->metapas->LoadEtapaById($proceso_obj->getIdEtapa());
						
						$servicio = $this->mservicios->LoadServicioById($compania->getIdServicio());
						
						$gestorInbound = $this->usuarios->LoadUsuarioById($compania->getIdUsuarioSca());
				
						$estatus_obj = $this->mestatus->LoadEstatusById($proceso_obj->getIdEstatus());
						
						$responsable=$this->mresponsable->LoadEstatusById($compania->getIdResponsable());
						
						$diasRegistrada = $this->chcalendario->calcularDias($compania->getFechaSysCompania());
						
						
						$arr = $json_output['rows'][] = array('IdCompania'		=> $compania->getIdCompania(),
						                                      'NombreCompania'	=> "<strong>".$compania->getNombreCompania()."</strong>",
						                                      'IdServicio'     	=> $servicio->getNombreServicio(),
						                                      'IdEtapa'        	=> $etapa_obj->GetNombre(),
						                                      'DiasRegistrada'	=> intval($diasRegistrada),
						                                      'Responsable' 	=> $responsable->getNombre(),
						                                      'GestorDeInbound'	=> $gestorInbound->getNombreUsuario());	
				}
			
			}
	
			$a=json_encode($json_output);
			$a=str_replace('\\','',$a);
			echo $a;
	       		
	    }

	    public function companyDetails($idCompania)
	    {
	    	$detallesCompany = array();
	    	
	    	$compania = $this->mcompania->LoadCompaniaById($idCompania);
	    	$servicio = $this->mservicios->LoadServicioById($compania->getIdServicio());
			$jurisdiccion = $this->mjurisdiccion->LoadjurisdiccionById($compania->getIdJurisdiccion());
			$diasTranscurridosDelServicio  = $this->chcalendario->calcularDias($compania->getFechaUsrCompania());
			
			$fecha = explode('-',$compania->getFechaUsrCompania());
			$fechaRegistro = $fecha[2]."-".$fecha[1]."-".$fecha[0];
			
			$proceso = $this->mprocesos->loadLastProceso($compania->getIdCompania());
		    $proceso_obj = $this->mprocesos->loadProcesoById(intval($proceso));
            $etapa_obj = $this->metapas->LoadEtapaById($proceso_obj->getIdEtapa());
		    $ultimatransaccion = $this->chcalendario->calcularDias($proceso_obj->getFechaProceso());
		    $estatus_obj = $this->mestatus->LoadEstatusById($proceso_obj->getIdEstatus());
		    $usuario_obj = $this->usuarios->LoadUsuarioById($proceso_obj->getIdUsuario());
		     
	   		$fechaEtapaActual= "";
	   		
			if (is_object($proceso)){
				$dateEtapa = explode(' ',$proceso->getFechaProceso());
			    $dateEtapaD = explode('-',$dateEtapa[0]);
						
				 	$fechaEtapaActual = $dateEtapaD[2]."-".$dateEtapaD[1]."-".$dateEtapaD[0]." ".$dateEtapa[1];
			}
			else {
				$fecha=explode('-',$compania->getFechaUsrCompania());
			 	$fechaEtapaActual = $fecha[2]."-".$fecha[1]."-".$fecha[0];
			}
	
		
			$detallesCompany['compania'] 						= $compania;
			$detallesCompany['servicio'] 						= $servicio;
			$detallesCompany['jurisdiccion'] 					= $jurisdiccion;
			$detallesCompany['proceso'] 						= $proceso;
			$detallesCompany['diasTranscurridosDelServicio'] 	= $diasTranscurridosDelServicio;
			$detallesCompany['etapaActual'] 					= $etapa_obj;
			$detallesCompany['estatusActual'] 					= $estatus_obj;
			$detallesCompany['usuarioUltimaTransaccion'] 		= $usuario_obj;
			$detallesCompany['ultimaTransaccion'] 				= $ultimatransaccion;
			$detallesCompany['fechaRegistro'] 					= $fechaRegistro;
			$detallesCompany['fechaEtapaActual'] 				= $fechaEtapaActual;
		
		
			$this->load->view('main', array('content_page' 	=> 'detalles_gestion_ci', 
											  'menutop' 		=> 5,
											  'detallesCompany'	=> $detallesCompany));
	    }
	    
	 /**
	 * GRAFICO NO.1
	 * Retorna un grafico tipo barra con el total de Seguimientos de
	 * Control Interno, separados por tipo de seguimiento de Control Interno 
	 */
	public function getGraficoTotalSeguimientoCI() 
	{
		$registros = array ();
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
	
		foreach ( $this->_semanaArray as $semana => $fecha ) {
	
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TODAS LLAMADAS

			$totalRegistros = 0;
			$totalLlamadas = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 1, $this->input->post ( "idUsuario" ), false, self::CONTROL_INTERNO);
			
					if(is_array($totalLlamadas)){
						
						foreach($totalLlamadas as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$registros [$semana] ["totalLlamadas"] = $totalRegistros;
			
			//TODOS LOS MAIL
			
			$totalRegistros= 0;
			
			$totalMails = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 2, $this->input->post ( "idUsuario" ), false, self::CONTROL_INTERNO);
			
				if(is_array($totalMails)){
						
						foreach($totalMails as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			
			
			$registros [$semana] ["totalMails"] = $totalRegistros;
			
			//TODOS LOS SMS
			
			$totalRegistros = 0;
			
			$totalSMS = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 4, $this->input->post ( "idUsuario" ), false, self::CONTROL_INTERNO);
			
					if(is_array($totalSMS)){
						
						foreach($totalSMS as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			
			$registros [$semana] ["totalSMS"] = $totalRegistros;
			
			//TODOS LOS MAILS AUTOMATICOS
			

			$totalRegistros = 0;
			
			$totalMailsAuto = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 3, $this->input->post ( "idUsuario" ), false, self::CONTROL_INTERNO);
			
					if(is_array($totalMailsAuto)){
						
						foreach($totalMailsAuto as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$registros [$semana] ["totalMailsAuto"] = $totalRegistros;
			$totalRegistros = 0;
			continue;
		}
		
		$strCat .= "</categories>";
		
		$strLlamadas = "<dataset seriesName='Llamadas'>";
		$strMails = "<dataset seriesName='Mail'>";
		$strSMS = "<dataset seriesName='SMS'>";
		$strMailAuto = "<dataset seriesName='Mail Automatico'>";
		
		foreach ( $registros as $semana ) {
			$strLlamadas .= "<set value='" . $semana ["totalLlamadas"] . "' />";
			$strMails .= "<set value='" . $semana ["totalMails"] . "' />";
			$strSMS .= "<set value='" . $semana ["totalSMS"] . "' />";
			$strMailAuto .= "<set value='" . $semana ["totalMailsAuto"] . "'/>";
		}
		
		$strLlamadas .= "</dataset>";
		$strMails .= "</dataset>";
		$strSMS .= "</dataset>";
		$strMailAuto .= "</dataset>";
		
		$strCat .= $strLlamadas;
		$strCat .= $strMails;
		$strCat .= $strSMS;
		$strCat .= $strMailAuto;
		
		$strXML = "<chart caption='Total Seguimientos de Control Interno' xAxisName='Semanas' showValues='0' plotFillAlpha='95' formatNumberScale='0'>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/StackedColumn3D.swf", "ChartId1", $strXML, "sACsa", 595, 250, 0, 0 );
	}
	
	/** 
	 * GRAFICO NO.2
	 * Retorna un grafico tipo pastel con la composicion de los tipos de seguimiento,
	 * Ejemplo: Mail, Llamada, SMS, Mail Automatico
	 * 
	 */
	
	public function getGraficoTotalComposicionSeguimientoCI() 
	{
		
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$filtroSemana = array ();
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
			break;
		}
		
		$strXML = "<chart caption = 'Composicion Tipo Seguimiento de Control Interno' baseFontSize='11' showValues='1'>";
		$tiposSeguimiento = $this->mtiposeguimientos->loadTipoSeguimientos ();
		$totalRegistros = 0;
		foreach ( $tiposSeguimiento as $tipoSeguimiento ) {
			
			$registros = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, $tipoSeguimiento->getMIdTipoSeguimiento (), $this->input->post ( "idUsuario" ), false, self::CONTROL_INTERNO);
			
					if(is_array($registros)){
						
						foreach($registros as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			
			$strXML .= "<set label = '" . $tipoSeguimiento->getMTipoSeguimiento () . "' value ='" . $totalRegistros . "'/>";
			$totalRegistros = 0;
		}
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "", $strXML, "ChartId2", 375, 250, false );
	}
	/**
	 * GRAFICO NO.3
	 * Retorna un grafico tipo lineal con el promedio de los
	 * tipo de seguimiento de control interno
	 */
	
	public function getGraficoSeguimientosCIPorRegistosServicio() 
	{
		$totalRegistros = 0;
		$registros = array ();
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			$divisor = 0;
			
		//TOTAL DE DIAS : INICIAL 
			
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 4, $this->input->post ( "idUsuario" ), false, false );
				if(is_array($procesos)){
						
						foreach($procesos as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			
			$companias = $this->mprocesos->loadCompaniasPorIdEtapa($filtroSemana, 4, $this->input->post ( "idUsuario" ));
			
			$promedioEtapaInicial = ($companias != 0)? ($totalRegistros / $companias): 0;
			
			
			if($promedioEtapaInicial < 0){
				$promedioEtapaInicial *= (-1); 
			}
			if($promedioEtapaInicial > 0){
				$divisor += 1;
			}
			$totalRegistros = 0;
			//TOTAL DE DIAS : FIRMA 
			
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 10, $this->input->post ( "idUsuario" ), false, false );
					if(is_array($procesos)){
						
						foreach($procesos as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$companias = $this->mprocesos->loadCompaniasPorIdEtapa($filtroSemana, 10, $this->input->post ( "idUsuario" ));
			
			$promedioEtapaFirma = ($companias != 0)? ($totalRegistros / $companias): 0;
			
			if($promedioEtapaFirma < 0){
				$promedioEtapaFirma *= (-1); 
			}
			if($promedioEtapaFirma > 0){
				$divisor += 1;
			}
			$totalRegistros = 0;
			//TOTAL DE DIAS : DATOS 
			
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 11, $this->input->post ( "idUsuario" ), false, false );
					if(is_array($procesos)){
						
						foreach($procesos as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$companias = $this->mprocesos->loadCompaniasPorIdEtapa($filtroSemana, 11, $this->input->post ( "idUsuario" ));
			
		$promedioEtapaDatos = ($companias != 0)? ($totalRegistros / $companias): 0;
		
			if($promedioEtapaDatos < 0){
				$promedioEtapaDatos *= (-1); 
			}
			if($promedioEtapaDatos > 0){
				$divisor += 1;
			}	
			$totalRegistros = 0;
			$sumaPromedio = $promedioEtapaInicial+$promedioEtapaFirma+$promedioEtapaDatos; 
			$promedio = ($sumaPromedio == 0) ? 0 : ($sumaPromedio / $divisor);
			
			$registros [$semana] ["promedio"] = $promedio;
			continue;
		}
		
		$strCat .= "</categories>";
		
		$strPromedioTotalSeguimiento = "<dataset seriesName='Seguimientos de CI / Registos Servicio'>";
		
		foreach ( $registros as $semana ) {
			$strPromedioTotalSeguimiento .= "<set value='" . $semana ["promedio"] . "' />";
		
		}
		
		$strPromedioTotalSeguimiento .= "</dataset>";
		
		$strCat .= $strPromedioTotalSeguimiento;
	
		$strXML = "<chart caption='Total de Seguimientos de CI / Total Registros de Servicio' lineThickness='1' formatNumberScale='0' anchorRadius='2' divLineAlpha='20' divLineColor='CC3300' divLineIsDashed='1' showAlternateHGridColor='1' alternateHGridColor='CC4400' shadowAlpha='40' labelStep='1' numvdivlines='5' chartRightMargin='35' bgColor='FFFFFF' bgAngle='270' bgAlpha='10,10' alternateHGridAlpha='5'  legendPosition ='RIGHT ' bordercolor='FFFFFF' xAxisName='Semanas' showValues='0' numberPrefix=''>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSLine.swf", "ChartId7", $strXML, "sACsa", 595, 250, 0, 0 );
	}
	/**
	 *GRAFICO NO.4
	 * Retorna un grafico tipo pastel con la composicion de los tipos de seguimiento,
	 * de control interno por Gestor
	 * 
	 */
	public function getGraficoTotalComposicionSeguimientoCIPorGestor() 
	{
		
	    	
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
	
		$filtroSemana = array ();
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
		
			break;
		}
		
		$strXML = "<chart caption = 'Seguimientos de CI, por Gestor' baseFontSize='11' showValues='1' xAxisName=''>";
		$totalRegistros = 0;
		foreach ( $this->_usuariosArray as $gestor ) {
			
				$registros = $this->mprocesos->loadProcesosPorGestorYEtapa ($filtroSemana, $gestor->getIdUsuario (), self::CONTROL_INTERNO);
					if(is_array($registros)){
						$x = 1;
						foreach($registros as $seguimiento){
							
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$strXML .= "<set label = '" . $gestor->getNombreUsuario () . "' value ='" . $totalRegistros . "'/>";
			
	
			$totalRegistros = 0;
		}
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId3", $strXML, "Pizza", 375, 250, false );
	}
	/**
	 * GRAFICO NO.5
	 * Retorna un grafico tipo lineal con el promedio de dias
	 * por inicial, firma y datos 
	 */
	public function getGraficoPromedioSeguimientoCI() 
	{
		$registros = array ();
		$this->_semanaArray = $this->chcalendario->semana ($this->_semanaActual);
		
		$strCat = "<categories>";
		$totalRegistros = 0;
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TOTAL DE DIAS : INICIAL 
			
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 4, $this->input->post ( "idUsuario" ), false, false );
				if(is_array($procesos)){
						
						foreach($procesos as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$companias = $this->mprocesos->loadCompaniasPorIdEtapa($filtroSemana, 4, $this->input->post ( "idUsuario" ));
			
			$promedioEtapaInicial = ($companias != 0)? ($totalRegistros / $companias): 0;
			
			if($promedioEtapaInicial < 0){
				$promedioEtapaInicial *= (-1); 
			}
			$totalRegistros = 0;
			//TOTAL DE DIAS : FIRMA 
			
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 10, $this->input->post ( "idUsuario" ), false, false );
					if(is_array($procesos)){
						
						foreach($procesos as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$companias = $this->mprocesos->loadCompaniasPorIdEtapa($filtroSemana, 10, $this->input->post ( "idUsuario" ));
			
			$promedioEtapaFirma = ($companias != 0)? ($totalRegistros / $companias): 0;
			
			if($promedioEtapaFirma < 0){
				$promedioEtapaFirma *= (-1); 
			}
			$totalRegistros = 0;
			//TOTAL DE DIAS : DATOS 
			
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 11, $this->input->post ( "idUsuario" ), false, false );
			if(is_array($procesos)){
						
						foreach($procesos as $seguimiento){
		
							$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
							if($compania != false){
							
								if($compania->getIdServicio() > 1){
									$totalRegistros++;
								}
							}
				
						}
					}else{
						$totalRegistros = 0;
					}
			
			$companias = $this->mprocesos->loadCompaniasPorIdEtapa($filtroSemana, 11, $this->input->post ( "idUsuario" ));
			
		$promedioEtapaDatos = ($companias != 0)? ($totalRegistros / $companias): 0;
		
			if($promedioEtapaDatos < 0){
				$promedioEtapaDatos *= (-1); 
			}
			$totalRegistros = 0;
			$registros [$semana] ["promedioEtapaInicial"] = $promedioEtapaInicial;
			$registros [$semana] ["promedioEtapaFirma"] = $promedioEtapaFirma;
			$registros [$semana] ["promedioEtapaDatos"] = $promedioEtapaDatos;
			
			continue;
		}
		
		$strCat .= "</categories>";
		
		$strPromedioInicial = "<dataset seriesName='Inicial'>";
		$strPromedioFirma = "<dataset seriesName='Firma'>";
		$strPromedioDatos = "<dataset seriesName='Datos'>";
		
		foreach ( $registros as $semana ) {
			$strPromedioInicial .= "<set value='" . $semana ["promedioEtapaInicial"] . "' />";
			$strPromedioFirma .= "<set value='" . $semana ["promedioEtapaFirma"] . "' />";
			$strPromedioDatos .= "<set value='" . $semana ["promedioEtapaDatos"] . "' />";
		}
		
		$strPromedioInicial .= "</dataset>";
		$strPromedioFirma .= "</dataset>";
		$strPromedioDatos .= "</dataset>";
		
		$strCat .= $strPromedioInicial;
		$strCat .= $strPromedioFirma;
		$strCat .= $strPromedioDatos;
		
		$strXML = "<chart caption='Promedio Seguimientos de CI por Etapas(Inicial, Firma y Datos)' lineThickness='1' formatNumberScale='0' anchorRadius='2' divLineAlpha='20' divLineColor='CC3300' divLineIsDashed='1' showAlternateHGridColor='1' alternateHGridColor='CC4400' shadowAlpha='40' labelStep='1' numvdivlines='5' chartRightMargin='35' bgColor='FFFFFF' bgAngle='270' bgAlpha='10,10' alternateHGridAlpha='5'  legendPosition ='RIGHT ' bordercolor='FFFFFF' xAxisName='Semanas' showValues='0' numberPrefix=''>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSLine.swf", "ChartId6", $strXML, "sACsa", 595, 250, 0, 0 );
	}
	/**
	 * Grafico NO. 6
	 * Retorna un grafico tipo pastel con la composicion de los registros,
	 * de CI, por Gestor Ojo (Inicial Datos y Firma).
	 * 
	 */
	
	public function getGraficoTotalComposicionRegistrosCIPorGestor() 
	{
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$filtroSemana = array ();
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
			break;
		}
		
		$strXML = "<chart caption = 'Registros de CI, por Gestor (Inicial Datos y Firma).' baseFontSize='11' showValues='1' xAxisName=''>";
		
		foreach ( $this->_usuariosArray as $gestor ) {
			if($gestor->getIdDepartamento() == 2){
				$registros = $this->mcompania->loadCantidadCompaniesPorGestor($filtroSemana, self::CONTROL_INTERNO,$gestor->getIdUsuario ());
			
				$strXML .= "<set label = '" . $gestor->getNombreUsuario () . "' value ='" . $registros . "'/>";
			}
		}
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId4", $strXML, "Pizza", 375, 250, false );
	}
	
	/**
	 * Grafico NO. 7
	 * Retorna un grafico tipo barra 
	 * Con 	Dias Diferencia Fecha del Sistema y Fecha de Registro.		
	   Separado Por Semana.	
	 */
	
	public function getGraficoPromedioSeguimientosPorDia() 
	{
		$registros = array ();
		
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TOTAL DIAS TODOS LOS SEGUIMIENTO
			
			$totalDias = 0;
			$dias = 0;
			$procesos = $this->mprocesos->loadProcesosPorGestorYFecha ( $filtroSemana, $this->input->post ( "idUsuario" ), self::CONTROL_INTERNO);
			if (is_array ( $procesos )) {
				foreach ($procesos as $proceso ) {
					 $compania = $this->mcompania->LoadCompaniaById($proceso->getIdCompania());
					 if($compania != false){
							
						if($compania->getIdServicio() > 1){
							if($proceso->getFechaSys() < $proceso->getFechaProceso()){
								$dias = 0;
							}else{
								$dias = $this->chcalendario->calcularDias ($proceso->getFechaProceso(), $proceso->getFechaSys ());
							}
							$totalDias += $dias;
						}
					 }
					
				}
			}
			
			$registros [$semana] ["promedioDias"] = $totalDias;
			
			continue;
		
		}
		$strCat .= "</categories>";
		
		$strPromedioDias = "<dataset seriesName='Promedio dias por semana'>";
		
		foreach ( $registros as $semana ) {
			$strPromedioDias .= "<set value='" . $semana ["promedioDias"] . "'/>";
		
		}
		
		$strPromedioDias .= "</dataset>";
		
		$strCat .= $strPromedioDias;
		
		$strXML = "<chart palette='1' caption='Total promedio de dias atrasados (Seguimientos)' showLabels='1' showvalues='0'  sYAxisValuesDecimals='2' connectNullData='0' PYAxisName='' SYAxisName=''  numDivLines='4' formatNumberScale='0'>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSColumn3DLineDY.swf", "ChartId9", $strXML, "sACsa", 595,250, 0, 0);
	
     	}
	/**
	 * Grafico NO. 8
	 * Retorna un grafico tipo pastel con el Total de Registros 
	 * por Estatus (Rojo, Amarilla, Verde) de una etapa en 
	 * especifico
	 * 
	 * @param int idEtapa 
	 * @return
	 */
	
	public function getGraficoTotalRegistrosPorEstatus($idEtapa) 
	{
		$this->_semanaArray = $this->chcalendario->semana ($this->_semanaActual );
		
		$etapa = $this->metapas->LoadEtapaById ($idEtapa);
		
		$filtroSemana = "";
		
		$totalRojos = 0;
		$totalAmarillos = 0;
		$totalVerdes = 0;
		$dias = 0;
		
		foreach ($this->_semanaArray as $semana => $fecha ) {
			$filtroSemana = $fecha [0];
			break;
		}
	
		$strXML = "<chart caption = 'Total de Registros por Estatus (Etapa {$etapa->GetNombre()})' baseFontSize='11' showValues='1' xAxisName=''>";
		
		$registros = $this->mprocesos->loadAllCompaniasPorIdEtapa($filtroSemana, $idEtapa, $this->input->post ( "idUsuario" ));

		$colores_array_etapa = $this->mmodeloetapas->loadModeloEtapas();
		$colores_etapa = $colores_array_etapa [0];
		
		if (is_array ($registros)) {
			
			foreach ( $registros as $registro ) {
		
				$seguimientos = $this->mprocesos->loadProcesosPorIdCompania($registro->getIdCompania(), $idEtapa, $this->input->post ( "idUsuario" ));
				
				if (is_array ($seguimientos)) {
					
			
					foreach ($seguimientos as $seguimiento){
					    
					$compania = $this->mcompania->LoadCompaniaById($seguimiento->getIdCompania());
					 if($compania != false){
							
						if($compania->getIdServicio() > 1){
							$fechas = date("Y-m-d H:i:s");
							
							$fechas = ($seguimiento->getFechaS() == '0000-00-00 00:00:00')?$fechas: $seguimiento->getFechaS();
							$dias += $this->chcalendario->calcularDias ($seguimiento->getFechaSys(), $fechas);
							
							}
					 	}
					
					}
					
					$bruto_etapa = ($dias / $etapa->GetTiempoEstimado()) * 100;
					
					$dias = 0;
				
					if ($bruto_etapa < $colores_etapa->getAmarilloModelo()) {
						   $totalVerdes ++;
					}elseif($bruto_etapa < $colores_etapa->getRojoModelo ()) {
							$totalAmarillos ++;
					} else {	
							$totalRojos ++;
					}
				}	
			
			}
		}

		$strXML .= "<set label = 'Verdes' value ='" . (int) $totalVerdes . "' color='#89942c'/>";
		$strXML .= "<set label = 'Amarillos' value ='" .(int) $totalAmarillos . "' color='#FAE421'/>";
		$strXML .= "<set label = 'Rojos' value ='" .(int) $totalRojos . "' color='#FF5252'/>";
		
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId5", $strXML, "Pizza", 375, 250, false );
	}    
}